题目大意:一条河分为$n$个段,每个段都有一个给定的鱼的数量$A_i$,现有$m$条船,每条船都有两个值$B_i$与$D_i$,$B_i$表示船必须在$B_i$处落锚,这意味着船必须占据$B_i$这个位置。且船的长度为$D_i$.数据保证$m$条船一定都可以放在河上。(也就是说我们选择时一定每条船都选,因为每条船都放显然是最优的)。求最大捕鱼数。
这道题给人一种贪心的错觉,实际上它是一个$DP$,首先对于每条船求出它左端点能放的最左边和最右边,这个结合代码应该很好理解
接下来就是$DP$了,$f_{j}$表示之前放的所有点的最右端为$j$的最大收益。显然我们可以发现每个$j$唯一对应着一条船,所以我们可以枚举每条船。
$f_{j+d_{i}-1}=max(f_{j+d_{i}-2},f_{j-1}+(sum_{a_{j+d_{i}-1}}-sum_{a_{j}}));$
在代码实现上还有一些细节需要处理,具体详见代码
1 |
|